import random
import datetime
import csv
import mysql.connector
# 正面评论列表
positive_comments = [
    "充满创造力和激情的杰作，让人耳目一新",
    "将多种风格巧妙融合，展现音乐的无限可能",
    "每一首歌都如同细腻的画卷，讲述着不同的故事",
    "不仅仅是音乐，更是一场情感和灵魂的盛宴",
    "艺术性与娱乐性的完美结合，让人回味无穷",
    "每个旋律都充满惊喜，引领听者进入一个个奇妙世界",
    "独树一帜的音乐风格，展现了艺术家独到的创见",
    "既有深度又极富感染力，让人深受触动",
    "音乐与情感的完美融合，创造了难以忘怀的听觉体验",
    "犹如一场精彩的音乐之旅，带领听众探索未知的领域",
    '这首歌真是太上头了，循环一整天都不腻!',
     '每次听都有新发现，好像跟歌里的故事一起生活过一样。',
     '旋律真是太棒了，走路时都能感觉到自己帅气了几分。',
     '这歌曲是我心情不好时的解药，一听心情就好了。',
     '简直是耳朵的盛宴，从头到尾每一秒都是享受。',
     '感觉这歌手是在为我唱歌，每个字每个调都戳中心坎。',
     '这音乐太有感觉了，听一次就上瘾，停不下来。',
     '歌词太接地气了，就像是我身边的故事，听了有共鸣。',
     '这首歌的旋律真是太治愈了，不开心的时候它就是我的小太阳。',
     '每次开车都要放这张歌曲，简直是路上的最佳伙伴。',
    "如梦似幻的旋律，引人深入那隐秘而美丽的音乐迷宫",
    "每个音符都跳跃着生命的火花，充满动感与活力",
    "宛如涓涓细流汇成的江河，既温柔又包含着磅礴的力量",
    "将传统与现代巧妙融合，创造出独一无二的音乐风景",
    "每一曲都是对生活的深刻感悟，触动人心的同时也启发思考",
    "如诗如画的旋律，美得令人窒息，令人沉醉",
    "充满节奏感的音乐，让人无法抗拒随之起舞",
    "独具匠心的创作，每一首都是精心雕琢的艺术品",
    "音乐中蕴含的情感深邃而真挚，让人感同身受",
    "旋律中蕴藏的故事丰富多彩，引人遐想"
]

# 负面评论列表
negative_comments = [
    "尽管努力创新，但作品整体缺乏深度和感染力。",
    "旋律平淡无奇，未能给听众留下深刻印象。",
    "尝试多种风格，但最终显得杂乱无章，缺乏统一感。",
    "歌词表达浅显，缺乏诗意和深度，难以引起共鸣。",
    "整体制作质量不佳，缺乏专业水准。",
    "虽有几分创意，但整体上显得过于平庸。",
    "歌曲缺乏明确的主题和方向，给人感觉散乱。",
    "旋律重复性高，缺乏变化和惊喜。",
    "尝试融合多种元素，但最终效果凌乱不堪。",
    "声音处理过度，失去了音乐的自然韵味。",
    "缺乏真诚的情感表达，听起来机械而冷漠。",
    "歌曲整体过于商业化，缺乏艺术性。",
    "音乐缺乏层次感和深度，难以长时间聆听。",
    "虽然制作精良，但内容空洞，缺乏创新。",
    "尝试跨界合作，但缺乏默契，效果不佳。",
    "曲风模仿他人，缺乏独创性和个性。",
    "节奏单调，缺少吸引力。",
    "歌曲长度过长，多数歌曲质量平平。",
    "配器过于简单或过于复杂，未能恰到好处。",
    "虽有几曲佳作，但整体水平参差不齐。",
    "这歌曲听下来真是困，完全提不起兴趣。",
    "每首歌都差不多，听一半就想换了。",
    "旋律一般般，没什么特别的，忘得差不多了。",
    "歌词有点尬，感觉像是随便写的。",
    "感觉制作很粗糙，音质也一般，有点失望。",
    "试图搞创新，但感觉有点装，不太买账。",
    "整张歌曲下来没几首能记住的，印象不深。",
    "感觉艺术家没什么新意，还是老调重弹。",
    "听了几首就不想听了，没有吸引我的地方。",
    "这音乐风格不是我喜欢的，有点不太对味。"
]

neutral_comments = [

    "作品展现了一定的技巧，但仍有提升空间。",
    "旋律悦耳，但缺乏更深层次的创新。",
    "整体制作符合行业标准，但未能突破。",
    "歌词内容平实，贴近生活，但略显平庸。",
    "声音处理得当，但缺乏独特的个性。",
    "歌曲整体中规中矩，适合背景音乐。",
    "音乐手法传统，适合特定听众群体。",
    "部分曲目表现突出，但整体感觉一般。",
    "尝试多样化，但缺乏一致性和焦点。",
    "适合安静聆听，但难以激起强烈情感。",
    "歌手表现稳定，但缺乏惊艳之作。",
    "歌曲有其亮点，但也有不足之处。",
    "音乐风格定义不明确，介于多种类型之间。",
    "旋律优美，但时而过于简单。",
    "合作多样，但效果参差不齐。",
    "一些创新尝试，但整体效果普通。",
    "节奏感尚可，但缺少记忆点。",
    "适合特定场合，但不够广泛流行。",
    "部分曲目耐听，但缺少持久吸引力。",
    "展示了一定潜力，期待未来更多作品。",
    "歌曲多样，但个别曲目风格突兀。",
    "有几首值得一听的曲目，但也有平平之作。",
    "歌曲保持了一定水准，但缺乏突破。",
    "适合忠实粉丝，但可能不吸引新听众。",
    "音乐制作精良，但创意不足。",
    "有所尝试，但成果不够显著。",
    "整体感觉舒适，但缺少震撼力。",
    "旋律和谐，但缺乏深度。",
    "部分创新亮点，但需要更多努力。",
    "技术娴熟，但艺术表现平平。",
    "这歌曲还行吧，有几首歌挺好听的。",
    "感觉一般般，既不差也没什么特别惊艳的地方。",
    "挺适合当背景音乐，听着挺舒服的。",
    "没什么特别的感觉，就那样吧。",
    "有些歌还可以，但大部分都挺普通的。",
    "听听还行，不过不会特意去推荐。",
    "一次性听听还行，但不太会回味。",
    "挺平淡的，适合不想太用心去听的时候。",
    "歌曲质量参差不齐，有好有坏。",
    "整体感觉普通，没有很打动人的地方。"
]

# 生成评论表格
comment_table = []
comment_id = 1
# 设置随机种子
random.seed(0)
for song_id in range(1, 41):  # 假设有40首歌
    num_comments = random.randint(20, 40)  # 随机生成20-40条评论

    for _ in range(num_comments):
        comment_type = random.choice(["positive", "negative", "neutral"])  # 随机选择评论类型

        if comment_type == "positive":
            comment = random.sample(positive_comments, random.randint(1, 5))
        elif comment_type == "negative":
            comment = random.sample(negative_comments, random.randint(1, 5))
        else:
            comment = random.sample(neutral_comments, random.randint(1, 5))

        comment_text = " ".join(comment)  # 将评论组合成一条字符串
        comment_length = len(comment_text)  # 计算评论长度

        comment_table.append([comment_id, song_id, comment_text, comment_length])  # 添加到表格中，包括评论长度
        comment_id += 1

# 创建MySQL数据库连接
conn = mysql.connector.connect(
    host='localhost',
    user='root',
    password='Bing2310',
    database='mylife'
)

# 创建游标对象
cursor = conn.cursor()

# 查询数据库中的数据，包括play_count和rating列
query = "SELECT id, play_count, rating FROM music_musicdetails WHERE id BETWEEN 1 AND 40"
cursor.execute(query)

# 获取查询结果，包括play_count和rating
result_data = cursor.fetchall()

# 关闭游标
cursor.close()
conn.close()

# 在 comment_table 中添加 play_count 和 rating 列
for row in comment_table:
    song_id = row[1]
    play_count = 0  # 默认播放次数为0
    rating = None  # 默认rating为空

    # 查找对应的播放次数和rating值
    for data_row in result_data:
        if data_row[0] == song_id:
            play_count = data_row[1]
            rating = data_row[2]
            break

    row.append(play_count)
    row.append(rating)  # 添加play_count和rating列


import pandas as pd

# 读取 sens_any.csv 文件
sens_any_file = "sens_any.csv"
sens_any_df = pd.read_csv(sens_any_file)

# 将 comment_table 转换为 pandas DataFrame
comment_df = pd.DataFrame(comment_table, columns=["序号", "歌曲标号", "评论内容", "评论长度", "play_count", "rating"])

# 将 "Sentiment" 列从 sens_any_df 添加到 comment_df 中，根据 "序号" 列进行匹配
comment_df["Sentiment"] = sens_any_df["Sentiment"]

# 打印包含 Sentiment 列的 comment_df
print(comment_df)

# 如果需要保存带有 Sentiment 列的结果到 CSV 文件
merged_csv_file = "comment_table_with_sentiment.csv"
comment_df.to_csv(merged_csv_file, index=False, encoding="utf-8")

print(f"{merged_csv_file} 文件已保存成功。")

# Re-importing the data as the file was re-uploaded
data = pd.read_csv('comment_table_with_sentiment.csv')
def convert_to_numeric(column):
    return pd.to_numeric(column, errors='coerce')
# Converting mixed-type columns to numeric, coercing errors to NaN
data['play_count'] = convert_to_numeric(data['play_count'])
data['rating'] = convert_to_numeric(data['rating'])
data['Sentiment'] = convert_to_numeric(data['Sentiment'])

# Grouping by song index and calculating required statistics
grouped_data = data.groupby('歌曲标号').agg(
    评论数量=('评论内容', 'count'),
    平均评论长度=('评论长度', 'mean'),
    平均play_count=('play_count', 'mean'),
    平均rating=('rating', 'mean'),
    平均Sentiment=('Sentiment', 'mean')
).reset_index()

grouped_data.to_csv('排名数据.csv')
print(grouped_data.head())




